#ifndef WEBSOCKETSERVER_H
#define WEBSOCKETSERVER_H

#include <QObject>
#include <QWebSocketServer>
#include <QWebSocket>
#include <QList>

class BackendService;

class WebSocketServer : public QObject
{
    Q_OBJECT

public:
    explicit WebSocketServer(QObject *parent = nullptr);
    ~WebSocketServer();

    // 启动服务器
    Q_INVOKABLE bool startServer(quint16 port = 9038);
    
    // 停止服务器
    Q_INVOKABLE void stopServer();
    
    // 检查服务器是否正在运行
    Q_INVOKABLE bool isRunning() const;
    
    // 发送消息给所有连接的客户端
    Q_INVOKABLE void broadcastMessage(const QString &message);
    
    // 发送消息给指定客户端
    Q_INVOKABLE void sendMessageToClient(const QString &clientId, const QString &message);
    
    // 设置 BackendService 实例
    void setBackendService(BackendService *backendService);

signals:
    // 客户端连接信号
    void clientConnected(const QString &clientId);
    
    // 客户端断开连接信号
    void clientDisconnected(const QString &clientId);
    
    // 收到消息信号
    void messageReceived(const QString &clientId, const QString &message);
    
    // 服务器启动信号
    void serverStarted(quint16 port);
    
    // 服务器停止信号
    void serverStopped();
    
    // 错误信号
    void errorOccurred(const QString &errorString);

private slots:
    // 处理新连接
    void onNewConnection();
    
    // 处理接收到的文本消息
    void onTextMessageReceived(const QString &message);
    
    // 处理接收到的二进制消息
    void onBinaryMessageReceived(const QByteArray &message);
    
    // 处理套接字断开连接
    void onSocketDisconnected();
    
    // 处理服务器错误
    void onServerError();

private:
    QWebSocketServer *m_webSocketServer;
    QList<QWebSocket*> m_clients;
    BackendService *m_backendService; // BackendService 实例指针
    
    // 生成客户端ID
    QString generateClientId(QWebSocket *socket);
    
    // 获取客户端ID
    QString getClientId(QWebSocket *socket);
    
    // 查找客户端
    QWebSocket* findClient(const QString &clientId);
};

#endif // WEBSOCKETSERVER_H

